﻿//using System;
//using Microsoft.Xna.Framework;
//using Microsoft.Xna.Framework.Graphics;

//namespace Persian.Enviroment
//{
//    class Snow : Base.WeatherEffect
//    {
//        #region Fields

//        private object locker;
//        Settings.CubeArea Area;
//        private Base.VertexPointSpriteParticle[] particles;
//        ushort NumberOfParticles;

//        #endregion

//        #region Constructor

//        public Snow(GraphicsDevice GDevice, Settings.CubeArea Area, ushort NumberOfParticles)
//        {
//            locker = new object();
//            this.GDevice = GDevice;
//            this.Area = Area;
//            color = Color.White;
//            Velocity = new Vector3(10, -20, 0);
//            Turbulence = 1;
//        }

//        #endregion

//        #region Load

//        public override void Load()
//        {
//            lock (locker) { loadingDone = false; }
//            texture = Utility.Content.Load<Texture2D>(@"Textures\Weather\Snow");
//            effect = Utility.Content.Load<Effect>(@"Shaders\Weather\Snow").Clone();
//            effect.Parameters["t0"].SetValue(texture);
//            Build();
//            lock (locker) { loadingDone = true; }
//        }

//        #endregion

//        #region Build

//        private void Build()
//        {
//            particles = new Base.VertexPointSpriteParticle[NumberOfParticles];

//            Random rand = new Random();
//            for (int i = 0; i < NumberOfParticles; i++)
//            {
//                Vector3 pos = new Vector3(rand.Next((int)Area.Width), rand.Next((int)Area.Height), rand.Next((int)Area.Lenght));
//                Vector2 randoms = new Vector2(rand.Next(1000), rand.Next(1000));
//                float pSize = rand.Next(5, 20) / 10.0f;
//                particles[i] = new Base.VertexPointSpriteParticle(pos, pSize, randoms);
//            }

//            vBuffer = new VertexBuffer(GDevice, Base.VertexPointSpriteParticle._VertexDeclaration, particles.Length, BufferUsage.WriteOnly | BufferUsage.None);
//            vBuffer.SetData(particles);

//            effect.Parameters["vOrigin"].SetValue(Area.Center);
//            effect.Parameters["fHeight"].SetValue(Area.Height);
//            effect.Parameters["fWidth"].SetValue(Area.Width);
//            effect.Parameters["fLength"].SetValue(Area.Lenght);
//        }

//        #endregion

//        #region Update

//        public override void Update(float Time)
//        {
//            lock (locker)
//            {
//                if (loadingDone)
//                {
//                    effect.Parameters["matWorld"].SetValue(WorldMatrix);
//                    effect.Parameters["matProjection"].SetValue(Utility.Camera.GetProjection());
//                    effect.Parameters["matView"].SetValue(Utility.Camera.GetView());
//                    effect.Parameters["fTime"].SetValue(Time / 500);
//                    effect.Parameters["vColor"].SetValue(color.ToVector3());
//                    effect.Parameters["vVelocity"].SetValue(Velocity);
//                    if (Turbulence != null)
//                    {
//                        effect.Parameters["fTurbulence"].SetValue((float)Turbulence);
//                    }
//                    else
//                    {
//                        throw new Exception("null is not allowed for Turbulence of Snow");
//                    }
//                }
//            }
//        }

//        #endregion

//        #region Draw

//        public override void Draw()
//        {
//            lock (locker)
//            {
//                if (loadingDone)
//                {
//                    GDevice.SetVertexBuffer(vBuffer);

//                    #region Apply Effect

//                    effect.CurrentTechnique.Passes[0].Apply();
//                    GDevice.DrawPrimitives(PrimitiveType.LineList, 0, particles.Length);

//                    #endregion
//                }
//            }
//        }

//        #endregion
//    }
//}
